

// python lambda  
// 其实 return x+y 也是一个函数， 但是这里的函数更加纯
// 更纯得函数往往是数学上的定义， 一个x对应一个y

let add = (x)=> {
    return (y) =>{
        return x + y
    }
}

// lambda 
// def add(x): return lambda y: x + y
// add(10) ...

// =>function
console.log(add(2))

// 没有理解函数是一等公民
let addTen = (x) => {
    return add(10)(x)
}

// =>20
console.log(addTen(10))


// 既然我想创造一个累加10的函数，返回一个函数就可以了
let addTenP = add(10)
// => 20
console.log(addTen(10))

// match
let newMatch = (pattern) => {
    return (what) => {
        return what.match(pattern)
       
    }
}

// javascript的正则是没有引号的...
phoneMatch = newMatch(/[A-E]/gi)
console.log(phoneMatch("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"))

// replace 相似 不写了


// filter
// filter这里注入函数，函数是一等公民
// for 循环
// TODO: 依赖注入和这里的差别

let filterCurry = (f)=> {
    return (arr) => {
        // 这里并没有修改arr, 很纯
        let arrr = arr.filter(f);
        return arrr
    }
} 

// 这里偷偷用下if
let f = (x) => {
    if (x > 10) {
        return x
    }
}
let NumberFilterCurry = filterCurry(f)
console.log(NumberFilterCurry([1,2,3,4,5,6,111,1222,111111]))



// map 和 filter相似

 

